 package  main

import "fmt"



type Car interface{
	Say()
}

type Bmw struct{

	Price int
}

func (this Bmw) Say(){
	fmt.Printf("my price is %d\n", this.Price)
}



func CheckType(i interface{}) {
	if v, ok := i.(Car); ok {			//判断类型是否能够转化为Car，即实现Car接口，一个类型不单单只能实现这一个接口，
											//也可以实现很多个接口
		fmt.Printf("sucess\n")
		v.Say()
	}
}


func describe(c Car){				//或者 func describe(c interface{Say()}){
	fmt.Printf("Interface 类型：%T，值：%v\n", c, c)
}

func main(){

	bmw := Bmw{Price: 200}

	CheckType(bmw)

	var c Car = bmw
	describe(c)
	c.Say()
}